Some types of computer attacks operate by exploiting valid code sequences in software programs without injecting any new executable code into computer memory, whereby small snippets of valid code sequences, often referred to as return-oriented programming (ROP) gadgets, may be found by the attacker and strung together to form new malicious code sequences. As a ROP exploit must locate the code to be executed, which requires knowledge of the memory address of the code, techniques such as Address Space Layout randomization (ASLR) have been developed whereby code modules are randomly relocated within a computer process's memory address space in order to make it more difficult for a ROP exploit to predict the location of a ROP gadget. Unfortunately, not all code modules are amenable to ASLR, while those that are may have their locations discovered by an attacker, such as by accessing data whose location is known and fixed relative to the start address of a relocated code module, whereupon the attacker may again predict the location of any ROP gadgets they may contain.